package org.common.utils.tool;

import java.util.concurrent.ThreadLocalRandom;

/**
 * @author zhouzhibing
 * @date 2025/8/7
 */
public class NumberTool {


    /**
     * 数字正则
     */
    public static final String NUMBER_REGEX = "\\s*[-+]?((\\d+\\.?\\d*)|(\\.\\d+))([eE][-+]?\\d+)?\\s*";

    /**
     * 判断字符串是否为数字
     * @param s 字符串
     * @return true/false
     */
    public static boolean isNumber(String s) {
        if (s == null)
            return false;
        return s.matches(NUMBER_REGEX);
    }

    /**
     * 根据指定范围返回一个随机值（包括起始值和结束值）。
     * @param min 最小值
     * @param max 最大值
     * @return 随机值
     */
    public static int getRandomInt(int min , int max) {
        if(min < 0 || max < 0)
            throw new RuntimeException("Util.getRandomInt min、max error , min:" + min + " max:"+max);

        if(min == max)
            return min;
        ThreadLocalRandom random = ThreadLocalRandom.current();
        return random.nextInt(min, max + 1);
    }

    /**
     * 获取数字的位数
     * @param number 数字
     * @return 数字的位数
     */
    public static int getDigitCount(int number) {
        int digitCount = 0;
        while(number > 0) {
            digitCount++;
            number /= 10;
        }
        return digitCount;
    }
}
